home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 26 / Cream of the Crop 26.iso / utility / fdate.zip / HOLIFEDS.BAT < prev    next >
DOS Batch File  |  1997-05-22  |  8KB  |  252 lines

  1. @echo off
  2. if (%1)==(SUBROUTINE) goto %2
  3. :: This batch file requires Fdate v7.0 or greater
  4. CLS
  5. :: get name of this batch file, in upper case
  6. FDATE /fupper /q%0 /V
  7. echo ───────────────────────────────────────────────────────────────────────────────
  8. echo                        %fdate%
  9. echo ───────────────────────────────────────────────────────────────────────────────
  10. echo       FUNCTION: calculate the Federal holidays in a given year
  11. echo.
  12. echo "(celebrated)" means the holiday falls on a Saturday or Sunday, so Federal
  13. echo workers are given the previous Friday or the following Monday as a holiday.
  14. echo.
  15. echo After the calendar is displayed, you can print it by pressing SHIFT+PRINTSCREEN
  16. echo ───────────────────────────────────────────────────────────────────────────────
  17.  
  18. if not (%1)==() set year=%1
  19. if not (%year%)==() goto GetYrEnd
  20.  
  21. :GetYr
  22. echo.
  23. echo Please enter the year for which you want federal holidays calculated,
  24. FDATE /fget /q"or press ENTER for current year > " /Vyear
  25. if not (%year%)==() goto GetYrEnd
  26.  
  27. :: get current year
  28. Fdate /Ff /At /Occyy /Vyear
  29.  
  30. :GetYrEnd
  31.  
  32. echo.
  33. :: check for validity of year parm (%1)
  34. Fdate /Fv /A01-01-%year% >nul
  35. if errorlevel 1 echo Value [%year%] is not a valid year.  Please re-enter.
  36. if errorlevel 1 goto GetYr
  37.  
  38. echo.
  39. echo Sometimes the timing of holidays makes certain dates especially
  40. echo attractive for taking annual leave.
  41. FDATE /FGETK /Q"Do you want me to show those dates? (press Y or N) > " /kYN /V
  42. set Z=
  43. if (%fdate%)==(N) set Z=REM
  44.  
  45. CLS
  46. echo ───────────────────────────────────────────────────────────────────────────────
  47. echo                   FEDERAL HOLIDAYS IN %year%
  48. echo ───────────────────────────────────────────────────────────────────────────────
  49. echo.
  50. :: =========== NEW YEARS DAY: JANUARY 1 ======================
  51. set holiday=01-01-%year%
  52. Fdate /Ff /A%holiday% /odow# /vdow#
  53.  
  54. :: Popular leave day: the Monday before a Tuesday holiday
  55. %Z% if %dow#%==3 Fdate /Fadd /N-1 /A%holiday% /P"-- POPULAR LEAVE DAY...................."
  56.  
  57. CALL %0  SUBROUTINE CheckWeekend %holiday%
  58. Fdate /Ff /A%holiday% /p"New Year's Day %year%%cf%..."
  59.  
  60. :: Popular leave day: the Friday after a Thursday holiday
  61. %Z% if %dow#%==5 Fdate /Fadd /N+1 /A%holiday% /P"-- POPULAR LEAVE DAY...................."
  62.  
  63. :: =========== MARTIN LUTHER KING BIRTHDAY: 3rd Monday in January
  64. Fdate /Fw /D2 /N3 /A01-01-%year% /P"Martin Luther King, Jr. Birthday........"
  65. Fdate /Fw /D2 /N3 /A01-01-%year% /Omm-dd-ccyy /vMLKDAY
  66.  
  67.  
  68. :: =========== INAUGURATION DAY: JAN 20, every 4th year after 1965
  69. set holiday=01-20-%year%
  70. Fdate /Ff /A%holiday% /odow# /vdow#
  71.  
  72. :: Inauguration day became a federal holiday starting in 1966
  73. Fdate /F#comp /A%year% /B1966 /Vmod
  74. if (%mod%)==(LT) goto EndInaugural
  75.  
  76. Fdate /F#mod /A%year% /B4 /Vmod
  77. if (%mod%)==(1) goto Inaugural
  78.                 goto EndInaugural
  79.  
  80. :Inaugural
  81.  
  82. :Popular leave day: the Tuesday between MLK birthday and Inauguration Day
  83. %Z% if %dow#%==4 Fdate /Fadd /N-1 /A%holiday% /P"-- POPULAR LEAVE DAY (Washington, DC)..."
  84.  
  85.  
  86. :: Jan 20 is inauguration day, unless it falls on a SUNDAY
  87.  
  88. set pf= .................
  89. if %dow#%==7 echo       (Inauguration Day, January 20, falls on Saturday)
  90. if %dow#%==7 goto EndInaugural
  91. if %dow#%==1 goto Imoved
  92.              goto Iweekday
  93.  
  94. :Imoved
  95. :: Inauguration day (Jan 20) falls on a Sunday.   Move it to Monday.
  96. Fdate /Fadd /A%holiday% /N+1 /omm-dd-ccyy /Vholiday
  97. set pf= (celebrated).....
  98. set dow#=2
  99. :Iweekday
  100.  
  101. if %holiday%==%mlkday% echo       (Inauguration Day falls on same day as M. L. King's birthday)
  102. if %holiday%==%mlkday% goto endInaugural
  103.  
  104. Fdate /Ff /A%holiday% /p"Inauguration Day%pf%......"
  105. echo       (Applies only to Federal employees working in the Washington, DC area)
  106.  
  107. :: Popular leave day: the Friday after a Thursday holiday
  108. %Z% if %dow#%==5 Fdate /Fadd /N+1 /A%holiday% /P"-- POPULAR LEAVE DAY...................."
  109.  
  110. echo.
  111. :EndInaugural
  112. set pf=
  113. :: ===============================================================
  114.  
  115.  
  116. :: ======== GEORGE WASHINGTON's BIRTHDAY: 3rd Monday in February
  117. Fdate /Fw /D2 /N3 /A02-01-%year% /P"Washington's Birthday..................."
  118.  
  119.  
  120. :: =============== MEMORIAL DAY: last monday in May ==============
  121. Fdate /FW /D2 /N-1 /A05-31-%year% /P"Memorial Day............................"
  122.  
  123.  
  124. :: =============== INDEPENDENCE DAY: July 4 ====================
  125. set holiday=07-04-%year%
  126. Fdate /Ff /A%holiday% /Odow# /Vdow#
  127.  
  128. :: Popular leave day: the Monday before a Tuesday holiday
  129. %Z% if %dow#%==3 Fdate /Fadd /N-1 /A%holiday% /P"-- POPULAR LEAVE DAY...................."
  130.  
  131. CALL %0  SUBROUTINE CheckWeekend %holiday%
  132. Fdate /Ff /A%holiday% /p"Independence Day%cf%......"
  133.  
  134. :: Popular leave day: the Friday after a Thursday holiday
  135. %Z% if %dow#%==5 Fdate /Fadd /N+1 /A%holiday% /P"-- POPULAR LEAVE DAY...................."
  136.  
  137.  
  138. :: =============== LABOR DAY: first Monday in September ==========
  139. Fdate /Fw /D2 /N1  /A09-01-%year% /P"Labor Day..............................."
  140.  
  141.  
  142. :: =============== COLUMBUS DAY: second Monday in October ========
  143. Fdate /Fw /D2 /N2  /A10-01-%year% /P"Columbus Day............................"
  144.  
  145.  
  146. :: =============== VETERAN'S DAY: November 11 =================
  147. set holiday=11-11-%year%
  148. Fdate /Ff /A%holiday% /odow# /Vdow#
  149.  
  150. :: Popular leave day: the Monday before a Tuesday holiday
  151. %Z% if %dow#%==3 Fdate /Fadd /N-1 /A%holiday% /P"-- POPULAR LEAVE DAY...................."
  152.  
  153. CALL %0  SUBROUTINE CheckWeekend %holiday%
  154. Fdate /Ff /A%holiday% /p"Veteran's Day%cf%........."
  155.  
  156. :: Popular leave day: the Friday after a Thursday holiday
  157. %Z% if %dow#%==5 Fdate /Fadd /N+1 /A%holiday% /P"-- POPULAR LEAVE DAY...................."
  158.  
  159.  
  160. :: =============== THANKSGIVING: 4th Thursday in November ========
  161. :: Get date of Thanksgiving in mm-dd-ccyy format
  162. Fdate /Fw /D5 /N4  /A11-01-%year% /Omm-dd-ccyy /Vholiday
  163.  
  164. Fdate /Ff /A%holiday%  /P"Thanksgiving Day........................"
  165.  
  166. :: Popular leave day: the Friday after a Thursday holiday
  167. %Z% Fdate /Fadd /N+1 /A%holiday% /P"-- POPULAR LEAVE DAY...................."
  168.  
  169.  
  170. :: =============== CHRISTMAS DAY: December 25 =================
  171. set holiday=12-25-%year%
  172. Fdate /Ff /A%holiday% /odow# /Vdow#
  173.  
  174. :: Popular leave day: the Monday before a Tuesday holiday
  175. %Z% if %dow#%==3 Fdate /Fadd /N-1 /A%holiday% /P"-- POPULAR LEAVE DAY...................."
  176.  
  177. :: The President often gives Federal employees leave on the afternoon
  178. :: of Christmas Eve, when Christmas Day falls on Friday
  179. if %dow#%==6 Fdate /Fadd /A%holiday% /N-1 /P"-- President MAY grant leave for afternoon of "
  180.  
  181. CALL %0  SUBROUTINE CheckWeekend %holiday%
  182. Fdate /Ff /A%holiday% /p"Christmas Day%cf%........."
  183.  
  184. :: Popular leave day: the Friday after a Thursday holiday
  185. %Z% if %dow#%==5 Fdate /Fadd /N+1 /A%holiday% /P"-- POPULAR LEAVE DAY...................."
  186.  
  187.  
  188. :: =============== NEW YEARS DAY: January 1 ===================
  189. :: advance year to next year
  190. fdate /f#add /a%year% /b1 /Vyear
  191.  
  192. set holiday=01-01-%year%
  193. Fdate /Ff /A%holiday% /odow# /Vdow#
  194.  
  195. :: Popular leave day: the Monday before a Tuesday holiday
  196. %Z% if %dow#%==3 Fdate /Fadd /N-1 /A%holiday% /P"-- POPULAR LEAVE DAY...................."
  197.  
  198. CALL %0  SUBROUTINE CheckWeekend %holiday%
  199. Fdate /Ff /A%holiday% /p"New Year's Day %year%%cf%..."
  200.  
  201. :: Popular leave day: the Friday after a Thursday holiday
  202. %Z% if %dow#%==5 Fdate /Fadd /N+1 /A%holiday% /P"-- POPULAR LEAVE DAY...................."
  203.  
  204. set year=
  205. set cf=..................
  206. set holiday=
  207. echo.
  208. goto cleanup
  209.  
  210. :: ================================================================
  211. ::                SUBROUTINES
  212. :: ================================================================
  213.  
  214. :CheckWeekend
  215. shift
  216. shift
  217. goto Dow-%dow#%
  218.  
  219. :dow-1
  220. Fdate /Fadd /A%1 /N+1 /omm-dd-ccyy /Vholiday
  221. set dow#=2
  222. set cf= (celebrated).....
  223. goto endit
  224.  
  225. :dow-7
  226. Fdate /Fadd /A%1 /N-1 /omm-dd-ccyy /Vholiday
  227. set dow#=6
  228. set cf= (celebrated).....
  229. goto endit
  230.  
  231. :dow-2
  232. :dow-3
  233. :dow-4
  234. :dow-5
  235. :dow-6
  236. set holiday=%1
  237. set cf=..................
  238. goto endit
  239.  
  240.  
  241. :CLEANUP
  242. set fdate=
  243. set dow#=
  244. set mod=
  245. set mlkday=
  246. set cf=
  247. set pf=
  248. set Z=
  249. set holiday=
  250.  
  251. :endit
  252.